/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import mail.cadena_aleatoria;
import mail.javamail;
import model.bean.BeanUsuario;
import model.dao.DaoUsuario;

/**
 *
 * @author Jesus
 */
@WebServlet(name = "ServletUsuario", urlPatterns = {"/ServletUsuario"})
public class ServletUsuario extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String action = request.getParameter("action");
        
        String destino = "/contrasenha/register.jsp?error=1";

        if (action.equals("register")) {

            DaoUsuario daousuario = new DaoUsuario();
            BeanUsuario user = new BeanUsuario();
            String mensaje_error = "";

            if (request.getParameter("nombre").equals("")) {
                mensaje_error += "Debe llenar el campo nombre.<br>";
            } else {
                user.setNombre(request.getParameter("nombre"));
            }

            if (request.getParameter("apellidos").equals("")) {
                mensaje_error += "Debe llenar el campo apellidos.<br>";
            } else {
                user.setApellidos(request.getParameter("apellidos"));
            }

            if (request.getParameter("codigo").equals("")) {
                mensaje_error += "Debe llenar el campo código.<br>";
            } else {
                if (request.getParameter("codigo").length() == 8) {

                    if (daousuario.validar_codigo(request.getParameter("codigo"))) {

                        mensaje_error += "Ya esta registrado.<br>";
                    } else {
                        user.setCodigo(request.getParameter("codigo"));
                    }
                } else {
                    mensaje_error += "El codigo debe tener 8 digitos.<br>";
                }


            }

            String password1 = request.getParameter("password");
            String password2 = request.getParameter("password2");

            if (!password1.equals(password2) || password1.equals("") || password2.equals("")) {
                mensaje_error += "Contraseñas mal escritas.<br>";
            } else {
               user.setPassword(password1);
            }

            String terminosycond = request.getParameter("terminosycondiciones");
            if(terminosycond != null && terminosycond.equals("1")){
                
            }else {
                    mensaje_error += "Debe aceptar los términos y condiciones.<br>";
                }
            request.setAttribute("mensaje", mensaje_error);


            if (mensaje_error.equals("")) {
                String email = daousuario.getcorreo(request.getParameter("codigo"));
                user.setCorreo(email);
                cadena_aleatoria numero = new cadena_aleatoria();
                String codigo_activacion = numero.getCadenaAlfanumAleatoria(30);
                user.setCodigo_activacion(codigo_activacion);
                StringBuilder mensaje = new StringBuilder("<div>Estimado usuario<br>");
                mensaje.append("Su codigo de activacion es:" + codigo_activacion + "<br>");
                mensaje.append("Para activar su cuenta haga click en el siguiente " + "<a href='192.168.35.243/RinconTeleco/view/user/activacion.jsp'>Link</a>");
                String mensaje2 = mensaje.toString();

                javamail mail = new javamail();
                mail.send(email, "Su codigo de activacion es:", mensaje2);
                HttpSession session_registro = request.getSession(true);
                session_registro.setAttribute("ID", session_registro.getId());
                session_registro.setAttribute("usuario_register", user);
                daousuario.insertUsuario(user);
                destino = "/contrasenha/register_confirmation.jsp";
            } else {
                destino = "/contrasenha/register.jsp?error=1&mensaje=" + mensaje_error;
            }

        }

        if (action.equals("update")) {

            DaoUsuario daoUsuario = new DaoUsuario();
            BeanUsuario user = new BeanUsuario();
            BeanUsuario user2 = new BeanUsuario();
            
            int id = Integer.parseInt(request.getParameter("id"));
            user.setIdusuario(id);
            user2 = daoUsuario.get(id);
            String privilegio = user2.getPrivilegio().getNombre();
            String mensaje_error = "";

            if (!request.getParameter("nombre").equals("")) {
                user.setNombre(request.getParameter("nombre"));
            }else{
                mensaje_error = "Debe llenar el campo del Nombre.<br>";
            }
            if (!request.getParameter("apellido").equals("")) {
                user.setApellidos(request.getParameter("apellido"));
            }else{
                mensaje_error = "Debe llenar el campo de los Apellidos.<br>";
            }
            String password1 = request.getParameter("password1");
            String password2 = request.getParameter("password2");

            if (password1.equals("") && password2.equals("")) {
                
            } else {
                if( !password1.equals(password2)|| password1.length()<8 ){
                    mensaje_error += "ContraseÃ±as mal escritas o debe tener al menos 8 caracteres.<br>";
                }else{
                user.setPassword(password1);
                }
            }
            
            if(mensaje_error.equals("")){
                daoUsuario.update(user);
                BeanUsuario usuario = daoUsuario.get(id);
                HttpSession session = request.getSession(true);
                session.setAttribute("usuario", usuario);
                destino="index.jsp";
                
            }else{
                destino = "editar_perfil.jsp?error=1&mensaje=" + mensaje_error;
            }          
            
            if(privilegio.equals("Usuario")){
                    destino = "/view/user/"+destino;
                }else{
                    if(privilegio.equals("Moderador")){
                        destino="/view/moderador/"+destino;
                    }else{
                        if(privilegio.equals("Administrador")){
                            destino="/view/admin/"+destino;
                        }
                    }
                } 
            
            
            
            
            
        }


        if (action.equals("aceptar_confirmacion")) {


            HttpSession session_registro = request.getSession();
            session_registro.removeAttribute("ID");
            session_registro.removeAttribute("usuario_register");
            session_registro.invalidate();

            destino = "/./";


        }

        if (action.equals("viewall")) {
            DaoUsuario daousuario = new DaoUsuario();
            request.setAttribute("listaUsuarios", daousuario.list());
            destino= "/view/admin/usuario/viewall.jsp";
           
        }
        
        if (action.equals("viewallmode")) {
            DaoUsuario daousuario = new DaoUsuario();
            request.setAttribute("listaUsuarios", daousuario.list());
            destino= "/view/moderador/usuario/viewall.jsp";
           
        }


        if (action.equals("delete")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.delete(Integer.parseInt(request.getParameter("id")));
            destino= "/ServletUsuario?action=viewall";
        }

        if (action.equals("block")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.block(Integer.parseInt(request.getParameter("id")));
            destino="/ServletUsuario?action=viewall";

        }

        if (action.equals("active")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.active(Integer.parseInt(request.getParameter("id")));
            destino="/ServletUsuario?action=viewall";
            

        }
        
           if (action.equals("block_mod")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.block(Integer.parseInt(request.getParameter("id")));
            destino="/ServletUsuario?action=viewallmode";

        }

        if (action.equals("active_mod")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.active(Integer.parseInt(request.getParameter("id")));
            destino="/ServletUsuario?action=viewallmode";
            

        }
        if (action.equals("mod")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.mod(Integer.parseInt(request.getParameter("id")));
             destino="/ServletUsuario?action=viewall";
            
            }
          if (action.equals("nomod")) {
            DaoUsuario daousuario = new DaoUsuario();
            daousuario.nomod(Integer.parseInt(request.getParameter("id")));
            destino="/ServletUsuario?action=viewall";
            
            }
          
          
          
          
          if (action.equals("olvide_pass")) {

            String accionStr = request.getParameter("accion") == null ? "1" : request.getParameter("accion");
            int accion = Integer.parseInt(accionStr);
            String urlusuario="";
            DaoUsuario daoUsuario = new DaoUsuario();
            javamail mail=new javamail();
            
            
            
            
            switch(accion){
            
                case 1:
                    String codigo = String.valueOf(request.getParameter("textinput1"));
                    BeanUsuario beanUsuario = daoUsuario.ValidarCodigo(codigo);
                    cadena_aleatoria cadena=new cadena_aleatoria();
                    urlusuario=cadena.getCadenaAlfanumAleatoria(15);
                    daoUsuario.meter_url(urlusuario,beanUsuario.getIdusuario());
                    if(beanUsuario != null){
                    
                        
//                            
                            String link = "http://localhost:8085" + request.getContextPath() + "/ServletUsuario?action=olvide_pass&accion=2&urlusuario="+urlusuario; // se envia el correo al codigo ingresado
//                            
                            mail.send(beanUsuario.getCorreo(),"Recuperacion de contraseña",link);
                            
                            destino = "/./";
                            
                            
                    }else {
                    
                        destino = "/contrasenha/recuperar.jsp";
                    }
                    break;
                    
                case 2:
                    String url=request.getParameter("urlusuario");
                    BeanUsuario beanUsuario2=daoUsuario.get_by_url(url);
                    request.setAttribute("beanUsuario", beanUsuario2);
                    destino = "/contrasenha/cambiarcontrasenha.jsp";//crear un jsp de ese nombre el cual le colocaran los campos que quieran
                    request.setAttribute("urluser", url);
                    break;
                    
                case 3:                 
                    String code=request.getParameter("code");
                    String password1=request.getParameter("password1");
                    String password2=request.getParameter("password2");
                    daoUsuario.cambiar_contraseña(code,password1);
                    destino="/index.jsp";
                            
            }
            
            
            


        }
          
        
         
            
            
         //// CAMBIOS PIJO - CARRIONCITO
        if (action.equals("activacion")) {
            DaoUsuario daousuario = new DaoUsuario();
            BeanUsuario usuario = new BeanUsuario();
            usuario.setCodigo_activacion(request.getParameter("codigo_activacion"));

            int val=daousuario.activacion(usuario);
            if(val==0){
                destino="/view/user/activacion.jsp?msg=Codigo Incorrecto"; 
                
            }else{
            destino="/index.jsp?msg=Cuenta Activada"; 
            }
        }
        
        
        
        
        
        
        
        //// FIN DE CAMBIOS
        RequestDispatcher rd = getServletContext().getRequestDispatcher(destino);
            rd.forward(request, response);   



    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
